/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.uca.sisbec.helpers.manto;

import com.uca.sisbec.forms.manto.RecomendadorForm;
import com.uca.sisbec.mapping.Recomendador;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;



/**
 * Hibernate Utility class with a convenient method to get Session Factory
 * object.
 *
 * @author Susy
 */
public class RecomendadorHelper {
    private Session session;
    
    public RecomendadorHelper(Session session){
        this.session=session;
    }
    
    public boolean validateRecomendador(RecomendadorForm rf){
        if (buscarRecomendadorDB(rf.getCodigo()) == null)
            return true;
        return false;
    }
    
    public int insertarRecomendandorDB(RecomendadorForm rf){
        Recomendador rec = new Recomendador();
        rec.setApellidos(rf.getApellidos());
        rec.setDepartamento(rf.getDepartamento());
        rec.setDireccion(rf.getDireccion());
        rec.setLugarTrabajo(rf.getLugarTrabajo());
        rec.setMunicipio(rf.getMunicipio());
        rec.setNombres(rf.getNombre());
        rec.setOcupacion(rf.getOcupacion());
        rec.setComentario(rf.getComentario());
        rec.setEstado(rf.isEstado()? "A" : "I");
        rec.setEmails(rf.getEmailsString());
        rec.setTels(rf.getPhonesString());
        session.save(rec);
        return rec.getCodRecomendador();
    }
    
    public void eliminarRecomendadorDB(RecomendadorForm rf){
        Recomendador rec = (Recomendador)session.get(Recomendador.class, rf.getCodigo());
        session.delete(rec);
    }
    
    /** Retorna listado para la busqueda*/
    public List<Recomendador> buscarRecomendadorDB(RecomendadorForm rf){
        Criteria crit = session.createCriteria(Recomendador.class)
                .add(Expression.conjunction()
                .add(Expression.like("nombres", "%" + rf.getNombre() + "%"))
        	.add(Expression.like("apellidos", "%" + rf.getApellidos() + "%"))
        	.add(Expression.like("municipio", "%" + rf.getMunicipio() + "%"))
        	.add(Expression.like("departamento", "%" + rf.getDepartamento() + "%")));
        List<Recomendador> listRec = new ArrayList<Recomendador>(crit.list());
        return listRec;
    }
    
    /** Retorna objeto segun busqueda por codigo */
    public Recomendador buscarRecomendadorDB(int cod){
        Recomendador rec = (Recomendador)session.get(Recomendador.class, cod);
        return rec;
    }
    
    /* Devuelve el objeto y lo pobla en el formulario */
    public void buscarRecomendadorDB(int cod, RecomendadorForm rf){
        Recomendador rec = buscarRecomendadorDB(cod);
        rf.setApellidos(rec.getApellidos());
        rf.setCodigo(rec.getCodRecomendador());
        rf.setDepartamento(rec.getDepartamento());
        rf.setDireccion(rec.getDireccion());
        rf.setLugarTrabajo(rec.getLugarTrabajo());
        rf.setMunicipio(rec.getMunicipio());
        rf.setNombre(rec.getNombres());
        rf.setOcupacion(rec.getOcupacion());
        rf.setComentario(rec.getComentario());
        rf.setEmailsString(rec.getEmails());
        rf.setPhonesString(rec.getTels());
        rf.setEstado((rec.getEstado().equals("A"))?true : false);
    }
    
    public void modificarRecomendadorDB(RecomendadorForm rf){
        Recomendador rec = new Recomendador();
        rec.setCodRecomendador(rf.getCodigo());
        rec.setApellidos(rf.getApellidos());
        rec.setDepartamento(rf.getDepartamento());
        rec.setDireccion(rf.getDireccion());
        rec.setLugarTrabajo(rf.getLugarTrabajo());
        rec.setMunicipio(rf.getMunicipio());
        rec.setNombres(rf.getNombre());
        rec.setOcupacion(rf.getOcupacion());
        rec.setComentario(rf.getComentario());
        rec.setEstado(rf.isEstado()? "A" : "I");
        rec.setEmails(rf.getEmailsString());
        rec.setTels(rf.getPhonesString());
        session.update(rec);
    }
}
